{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 7.5 IMDb（Internet Movie Database）からDataLoaderを作成\n",
    "\n",
    "- 本ファイルでは、IMDb（Internet Movie Database）のデータを使用して、感情分析（0：ネガティブ、1：ポジティブ）を2値クラス分類するためのDatasetとDataLoaderを作成します。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "※　本章のファイルはすべてUbuntuでの動作を前提としています。Windowsなど文字コードが違う環境での動作にはご注意下さい。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 7.5 学習目標\n",
    "\n",
    "1.\tテキスト形式のファイルデータからtsvファイルを作成し、torchtext用のDataLoaderを作成できるようになる"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 事前準備\n",
    "書籍の指示に従い、本章で使用するデータを用意します\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. IMDbデータセットをtsv形式に変換\n",
    "\n",
    "Datasetをダウンロードします\n",
    "\n",
    "※torchtextで標準でIMDbが使える関数があるのですが、今回は今後データセットが用意されていない場合でも対応できるように0から作ります。\n",
    "\n",
    "http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz\n",
    "\n",
    "5万件のデータ（train,testともに2.5万件）です。データidとrating（1-10）でファイル名が決まっています。\n",
    "\n",
    "rateは10の方が良いです。4以下がnegative、7以上がpositiveにクラス分けされています。\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# tsv形式のファイルにします\n",
    "import glob\n",
    "import os\n",
    "import io\n",
    "import string\n",
    "\n",
    "\n",
    "# 訓練データのtsvファイルを作成します\n",
    "\n",
    "f = open('./data/IMDb_train.tsv', 'w')\n",
    "\n",
    "path = './data/aclImdb/train/pos/'\n",
    "for fname in glob.glob(os.path.join(path, '*.txt')):\n",
    "    with io.open(fname, 'r', encoding=\"utf-8\") as ff:\n",
    "        text = ff.readline()\n",
    "\n",
    "        # タブがあれば消しておきます\n",
    "        text = text.replace('\\t', \" \")\n",
    "\n",
    "        text = text+'\\t'+'1'+'\\t'+'\\n'\n",
    "        f.write(text)\n",
    "\n",
    "path = './data/aclImdb/train/neg/'\n",
    "for fname in glob.glob(os.path.join(path, '*.txt')):\n",
    "    with io.open(fname, 'r', encoding=\"utf-8\") as ff:\n",
    "        text = ff.readline()\n",
    "\n",
    "        # タブがあれば消しておきます\n",
    "        text = text.replace('\\t', \" \")\n",
    "\n",
    "        text = text+'\\t'+'0'+'\\t'+'\\n'\n",
    "        f.write(text)\n",
    "\n",
    "f.close()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# テストデータの作成\n",
    "\n",
    "f = open('./data/IMDb_test.tsv', 'w')\n",
    "\n",
    "path = './data/aclImdb/test/pos/'\n",
    "for fname in glob.glob(os.path.join(path, '*.txt')):\n",
    "    with io.open(fname, 'r', encoding=\"utf-8\") as ff:\n",
    "        text = ff.readline()\n",
    "\n",
    "        # タブがあれば消しておきます\n",
    "        text = text.replace('\\t', \" \")\n",
    "\n",
    "        text = text+'\\t'+'1'+'\\t'+'\\n'\n",
    "        f.write(text)\n",
    "\n",
    "\n",
    "path = './data/aclImdb/test/neg/'\n",
    "\n",
    "for fname in glob.glob(os.path.join(path, '*.txt')):\n",
    "    with io.open(fname, 'r', encoding=\"utf-8\") as ff:\n",
    "        text = ff.readline()\n",
    "\n",
    "        # タブがあれば消しておきます\n",
    "        text = text.replace('\\t', \" \")\n",
    "\n",
    "        text = text+'\\t'+'0'+'\\t'+'\\n'\n",
    "        f.write(text)\n",
    "\n",
    "f.close()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. 前処理と単語分割の関数を定義"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "区切り文字： !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\n",
      "['I', 'like', 'cats', '.']\n"
     ]
    }
   ],
   "source": [
    "import string\n",
    "import re\n",
    "\n",
    "# 以下の記号はスペースに置き換えます（カンマ、ピリオドを除く）。\n",
    "# punctuationとは日本語で句点という意味です\n",
    "print(\"区切り文字：\", string.punctuation)\n",
    "# !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\n",
    "\n",
    "# 前処理\n",
    "\n",
    "\n",
    "def preprocessing_text(text):\n",
    "    # 改行コードを消去\n",
    "    text = re.sub('<br />', '', text)\n",
    "\n",
    "    # カンマ、ピリオド以外の記号をスペースに置換\n",
    "    for p in string.punctuation:\n",
    "        if (p == \".\") or (p == \",\"):\n",
    "            continue\n",
    "        else:\n",
    "            text = text.replace(p, \" \")\n",
    "\n",
    "    # ピリオドなどの前後にはスペースを入れておく\n",
    "    text = text.replace(\".\", \" . \")\n",
    "    text = text.replace(\",\", \" , \")\n",
    "    return text\n",
    "\n",
    "# 分かち書き（今回はデータが英語で、簡易的にスペースで区切る）\n",
    "\n",
    "\n",
    "def tokenizer_punctuation(text):\n",
    "    return text.strip().split()\n",
    "\n",
    "\n",
    "# 前処理と分かち書きをまとめた関数を定義\n",
    "def tokenizer_with_preprocessing(text):\n",
    "    text = preprocessing_text(text)\n",
    "    ret = tokenizer_punctuation(text)\n",
    "    return ret\n",
    "\n",
    "\n",
    "# 動作を確認します\n",
    "print(tokenizer_with_preprocessing('I like cats.'))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DataLoaderの作成"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# データを読み込んだときに、読み込んだ内容に対して行う処理を定義します\n",
    "import torchtext\n",
    "\n",
    "\n",
    "# 文章とラベルの両方に用意します\n",
    "max_length = 256\n",
    "TEXT = torchtext.data.Field(sequential=True, tokenize=tokenizer_with_preprocessing, use_vocab=True,\n",
    "                            lower=True, include_lengths=True, batch_first=True, fix_length=max_length, init_token=\"<cls>\", eos_token=\"<eos>\")\n",
    "LABEL = torchtext.data.Field(sequential=False, use_vocab=False)\n",
    "\n",
    "# 引数の意味は次の通り\n",
    "# init_token：全部の文章で、文頭に入れておく単語\n",
    "# eos_token：全部の文章で、文末に入れておく単語\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "訓練および検証のデータ数 25000\n",
      "1つ目の訓練および検証のデータ {'Text': ['i', 'couldn', 't', 'believe', 'the', 'comments', 'made', 'about', 'the', 'movie', '.', 'as', 'i', 'read', 'the', 'awful', 'opinions', 'about', 'the', 'movie', 'i', 'actually', 'wondered', 'if', 'you', 'had', 'actually', 'viewed', 'the', 'same', 'movie', 'that', 'i', 'did', '.', 'what', 'i', 'viewed', 'was', 'incredible', 'i', 'think', 'the', 'actresses', 'and', 'director', 'did', 'a', 'fantastic', 'job', 'in', 'the', 'movie', '.', 'i', 'hadn', 't', 'had', 'the', 'pleasure', 'to', 'see', 'either', 'actress', 'previously', 'and', 'i', 'couldn', 't', 'have', 'been', 'more', 'set', 'back', 'by', 'the', 'incredible', 'job', 'that', 'they', 'did', 'i', 'd', 'have', 'to', 'say', 'its', 'the', 'most', 'believable', 'movie', 'that', 'i', 've', 'seen', 'in', 'a', 'long', 'time', '.', 'what', 'i', 'don', 't', 'see', 'is', 'why', 'everyone', 'has', 'such', 'a', 'problem', 'with', 'deanna', 's', 'choice', 'of', 'drug', 'in', 'the', 'attempt', 'of', 'suicide', 'scene', ',', 'from', 'the', 'comments', 'made', 'you', 'sound', 'like', 'it', 'was', 'the', 'actresses', 'choice', 'and', 'her', 'stupid', 'choice', '.', 'that', 'i', 'don', 't', 'understand', ',', 'its', 'a', 'movie', 'written', 'by', 'someone', 'else', 'and', 'directed', 'by', 'someone', 'else', 'so', 'how', 'it', 'can', 'be', 'the', 'actresses', 'error', 'i', 'fail', 'to', 'see', '.', 'i', 'think', 'it', 'was', 'a', 'real', 'believable', 'movie', 'that', 'i', 'would', 'see', 'again', 'and', 'recommend', '.', 'opinions', 'are', 'what', 'the', 'are', 'and', 'its', 'too', 'bad', 'that', 'so', 'many', 'are', 'so', 'close', 'minded', '.', 'i', 'hope', 'to', 'see', 'any', 'of', 'the', 'actors', 'soon', 'i', 'think', 'that', 'all', 'played', 'great', 'roles', '.', 'busy', 'philipps', 'will', 'be', 'the', 'highest', 'paid', 'actress', 'someday', 'and', 'i', 'hope', 'she', 'can', 'laugh', 'in', 'the', 'face', 'of', 'everyone', 'that', 'criticized', 'her', 'you', 'go', 'girl'], 'Label': '1'}\n"
     ]
    }
   ],
   "source": [
    "# フォルダ「data」から各tsvファイルを読み込みます\n",
    "train_val_ds, test_ds = torchtext.data.TabularDataset.splits(\n",
    "    path='./data/', train='IMDb_train.tsv',\n",
    "    test='IMDb_test.tsv', format='tsv',\n",
    "    fields=[('Text', TEXT), ('Label', LABEL)])\n",
    "\n",
    "# 動作確認\n",
    "print('訓練および検証のデータ数', len(train_val_ds))\n",
    "print('1つ目の訓練および検証のデータ', vars(train_val_ds[0]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "訓練データの数 20000\n",
      "検証データの数 5000\n",
      "1つ目の訓練データ {'Text': ['i', 'watched', 'the', 'entire', 'movie', 'recognizing', 'the', 'participation', 'of', 'william', 'hurt', ',', 'natascha', 'mcelhone', ',', 'and', 'desiree', 'nosbusch', '.', 'i', 'm', 'glad', 'that', 'i', 'had', 'no', 'idea', 'of', 'the', 'presence', 'of', 'peter', 'weller', '.', 'at', 'the', 'end', 'of', 'the', 'movie', 'i', 'said', 'that', 'was', 'peter', 'weller', 'kudos', 'to', 'mr', '.', 'weller', 'for', 'an', 'outstanding', 'performance', '.', 'weller', 'played', 'a', 'major', 'character', ',', 'and', 'his', 'performance', 'was', 'such', 'that', 'i', 'didn', 't', 'even', 'recognize', 'him', '.', 'overall', 'the', 'plot', 'was', 'bad', ',', 'the', 'writing', 'was', 'bad', ',', 'and', 'the', 'performances', ',', 'aside', 'from', 'those', 'of', 'nosbusch', 'and', 'weller', ',', 'were', 'subpar', '.', 'the', 'scenery', 'and', 'setting', 'were', 'interesting', ',', 'and', 'weller', 'was', 'amazing', '.', '4', 'stars', ',', 'of', 'a', 'possible', '10', '.'], 'Label': '0'}\n"
     ]
    }
   ],
   "source": [
    "import random\n",
    "# torchtext.data.Datasetのsplit関数で訓練データとvalidationデータを分ける\n",
    "\n",
    "train_ds, val_ds = train_val_ds.split(\n",
    "    split_ratio=0.8, random_state=random.seed(1234))\n",
    "\n",
    "# 動作確認\n",
    "print('訓練データの数', len(train_ds))\n",
    "print('検証データの数', len(val_ds))\n",
    "print('1つ目の訓練データ', vars(train_ds[0]))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ボキャブラリーを作成"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  0%|          | 0/999994 [00:00<?, ?it/s]Skipping token b'999994' with 1-dimensional vector [b'300']; likely a header\n",
      "100%|█████████▉| 999913/999994 [02:16<00:00, 8051.71it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1単語を表現する次元数： 300\n",
      "単語数： 999994\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "100%|█████████▉| 999913/999994 [02:31<00:00, 8051.71it/s]"
     ]
    }
   ],
   "source": [
    "# torchtextで単語ベクトルとして英語学習済みモデルを読み込みます\n",
    "\n",
    "from torchtext.vocab import Vectors\n",
    "\n",
    "english_fasttext_vectors = Vectors(name='data/wiki-news-300d-1M.vec')\n",
    "\n",
    "\n",
    "# 単語ベクトルの中身を確認します\n",
    "print(\"1単語を表現する次元数：\", english_fasttext_vectors.dim)\n",
    "print(\"単語数：\", len(english_fasttext_vectors.itos))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([17916, 300])\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "defaultdict(<function torchtext.vocab._default_unk_index()>,\n",
       "            {'<unk>': 0,\n",
       "             '<pad>': 1,\n",
       "             '<cls>': 2,\n",
       "             '<eos>': 3,\n",
       "             'the': 4,\n",
       "             '.': 5,\n",
       "             ',': 6,\n",
       "             'and': 7,\n",
       "             'a': 8,\n",
       "             'of': 9,\n",
       "             'to': 10,\n",
       "             'is': 11,\n",
       "             'it': 12,\n",
       "             'in': 13,\n",
       "             'i': 14,\n",
       "             'this': 15,\n",
       "             'that': 16,\n",
       "             's': 17,\n",
       "             'was': 18,\n",
       "             'as': 19,\n",
       "             'for': 20,\n",
       "             'with': 21,\n",
       "             'movie': 22,\n",
       "             'but': 23,\n",
       "             'film': 24,\n",
       "             't': 25,\n",
       "             'you': 26,\n",
       "             'on': 27,\n",
       "             'not': 28,\n",
       "             'he': 29,\n",
       "             'are': 30,\n",
       "             'his': 31,\n",
       "             'have': 32,\n",
       "             'be': 33,\n",
       "             'one': 34,\n",
       "             'all': 35,\n",
       "             'at': 36,\n",
       "             'they': 37,\n",
       "             'by': 38,\n",
       "             'an': 39,\n",
       "             'who': 40,\n",
       "             'from': 41,\n",
       "             'so': 42,\n",
       "             'like': 43,\n",
       "             'there': 44,\n",
       "             'her': 45,\n",
       "             'or': 46,\n",
       "             'just': 47,\n",
       "             'about': 48,\n",
       "             'out': 49,\n",
       "             'has': 50,\n",
       "             'if': 51,\n",
       "             'what': 52,\n",
       "             'some': 53,\n",
       "             'good': 54,\n",
       "             'can': 55,\n",
       "             'she': 56,\n",
       "             'when': 57,\n",
       "             'more': 58,\n",
       "             'very': 59,\n",
       "             'up': 60,\n",
       "             'no': 61,\n",
       "             'time': 62,\n",
       "             'even': 63,\n",
       "             'would': 64,\n",
       "             'my': 65,\n",
       "             'which': 66,\n",
       "             'story': 67,\n",
       "             'only': 68,\n",
       "             'really': 69,\n",
       "             'see': 70,\n",
       "             'their': 71,\n",
       "             'had': 72,\n",
       "             'we': 73,\n",
       "             'me': 74,\n",
       "             'were': 75,\n",
       "             'well': 76,\n",
       "             'than': 77,\n",
       "             'much': 78,\n",
       "             'bad': 79,\n",
       "             'people': 80,\n",
       "             'been': 81,\n",
       "             'other': 82,\n",
       "             'get': 83,\n",
       "             'also': 84,\n",
       "             'will': 85,\n",
       "             'do': 86,\n",
       "             'because': 87,\n",
       "             'great': 88,\n",
       "             'into': 89,\n",
       "             'first': 90,\n",
       "             'him': 91,\n",
       "             'how': 92,\n",
       "             'don': 93,\n",
       "             'most': 94,\n",
       "             'made': 95,\n",
       "             'its': 96,\n",
       "             'then': 97,\n",
       "             'them': 98,\n",
       "             'way': 99,\n",
       "             'make': 100,\n",
       "             'could': 101,\n",
       "             'too': 102,\n",
       "             'any': 103,\n",
       "             'movies': 104,\n",
       "             'after': 105,\n",
       "             'think': 106,\n",
       "             'characters': 107,\n",
       "             'character': 108,\n",
       "             'films': 109,\n",
       "             'watch': 110,\n",
       "             'two': 111,\n",
       "             'many': 112,\n",
       "             'seen': 113,\n",
       "             'life': 114,\n",
       "             'never': 115,\n",
       "             'being': 116,\n",
       "             'plot': 117,\n",
       "             'love': 118,\n",
       "             'acting': 119,\n",
       "             'little': 120,\n",
       "             'over': 121,\n",
       "             'where': 122,\n",
       "             'best': 123,\n",
       "             'did': 124,\n",
       "             'show': 125,\n",
       "             'know': 126,\n",
       "             'off': 127,\n",
       "             'man': 128,\n",
       "             'ever': 129,\n",
       "             'does': 130,\n",
       "             'here': 131,\n",
       "             'better': 132,\n",
       "             'still': 133,\n",
       "             'end': 134,\n",
       "             'your': 135,\n",
       "             'these': 136,\n",
       "             'scene': 137,\n",
       "             'say': 138,\n",
       "             'while': 139,\n",
       "             'why': 140,\n",
       "             'scenes': 141,\n",
       "             'go': 142,\n",
       "             'such': 143,\n",
       "             've': 144,\n",
       "             'm': 145,\n",
       "             'something': 146,\n",
       "             'should': 147,\n",
       "             'back': 148,\n",
       "             'through': 149,\n",
       "             'real': 150,\n",
       "             'those': 151,\n",
       "             'now': 152,\n",
       "             'watching': 153,\n",
       "             'doesn': 154,\n",
       "             'old': 155,\n",
       "             'though': 156,\n",
       "             'years': 157,\n",
       "             'thing': 158,\n",
       "             're': 159,\n",
       "             'actors': 160,\n",
       "             'director': 161,\n",
       "             'new': 162,\n",
       "             'work': 163,\n",
       "             'before': 164,\n",
       "             'another': 165,\n",
       "             'didn': 166,\n",
       "             '10': 167,\n",
       "             'nothing': 168,\n",
       "             'funny': 169,\n",
       "             'actually': 170,\n",
       "             'makes': 171,\n",
       "             'going': 172,\n",
       "             'look': 173,\n",
       "             'find': 174,\n",
       "             'same': 175,\n",
       "             'few': 176,\n",
       "             'part': 177,\n",
       "             'every': 178,\n",
       "             'again': 179,\n",
       "             'lot': 180,\n",
       "             'world': 181,\n",
       "             'cast': 182,\n",
       "             'us': 183,\n",
       "             'quite': 184,\n",
       "             'down': 185,\n",
       "             'things': 186,\n",
       "             'want': 187,\n",
       "             'young': 188,\n",
       "             'seems': 189,\n",
       "             'around': 190,\n",
       "             'pretty': 191,\n",
       "             'horror': 192,\n",
       "             'fact': 193,\n",
       "             'however': 194,\n",
       "             'take': 195,\n",
       "             'got': 196,\n",
       "             'thought': 197,\n",
       "             'series': 198,\n",
       "             'enough': 199,\n",
       "             'may': 200,\n",
       "             'long': 201,\n",
       "             'both': 202,\n",
       "             'give': 203,\n",
       "             'between': 204,\n",
       "             'original': 205,\n",
       "             'big': 206,\n",
       "             'action': 207,\n",
       "             'own': 208,\n",
       "             'right': 209,\n",
       "             'always': 210,\n",
       "             'must': 211,\n",
       "             'without': 212,\n",
       "             'isn': 213,\n",
       "             'come': 214,\n",
       "             'point': 215,\n",
       "             'role': 216,\n",
       "             'saw': 217,\n",
       "             'family': 218,\n",
       "             'gets': 219,\n",
       "             'comedy': 220,\n",
       "             'times': 221,\n",
       "             'least': 222,\n",
       "             'almost': 223,\n",
       "             'guy': 224,\n",
       "             'bit': 225,\n",
       "             'done': 226,\n",
       "             'interesting': 227,\n",
       "             'music': 228,\n",
       "             'whole': 229,\n",
       "             'script': 230,\n",
       "             'd': 231,\n",
       "             'far': 232,\n",
       "             'anything': 233,\n",
       "             'making': 234,\n",
       "             'feel': 235,\n",
       "             'minutes': 236,\n",
       "             'll': 237,\n",
       "             'since': 238,\n",
       "             'last': 239,\n",
       "             'probably': 240,\n",
       "             'might': 241,\n",
       "             'girl': 242,\n",
       "             'woman': 243,\n",
       "             'performance': 244,\n",
       "             '2': 245,\n",
       "             'kind': 246,\n",
       "             'away': 247,\n",
       "             'yet': 248,\n",
       "             'tv': 249,\n",
       "             'day': 250,\n",
       "             'rather': 251,\n",
       "             'am': 252,\n",
       "             'worst': 253,\n",
       "             'sure': 254,\n",
       "             'fun': 255,\n",
       "             'hard': 256,\n",
       "             'each': 257,\n",
       "             'anyone': 258,\n",
       "             'found': 259,\n",
       "             'having': 260,\n",
       "             'our': 261,\n",
       "             'played': 262,\n",
       "             'course': 263,\n",
       "             'believe': 264,\n",
       "             'especially': 265,\n",
       "             'although': 266,\n",
       "             'trying': 267,\n",
       "             'set': 268,\n",
       "             'comes': 269,\n",
       "             'goes': 270,\n",
       "             'looking': 271,\n",
       "             'screen': 272,\n",
       "             'book': 273,\n",
       "             'put': 274,\n",
       "             'looks': 275,\n",
       "             'different': 276,\n",
       "             'dvd': 277,\n",
       "             'year': 278,\n",
       "             'ending': 279,\n",
       "             'actor': 280,\n",
       "             'reason': 281,\n",
       "             'shows': 282,\n",
       "             'place': 283,\n",
       "             'three': 284,\n",
       "             'true': 285,\n",
       "             'money': 286,\n",
       "             'someone': 287,\n",
       "             'let': 288,\n",
       "             'sense': 289,\n",
       "             'worth': 290,\n",
       "             'maybe': 291,\n",
       "             'everything': 292,\n",
       "             'once': 293,\n",
       "             'wasn': 294,\n",
       "             'play': 295,\n",
       "             'american': 296,\n",
       "             'main': 297,\n",
       "             'later': 298,\n",
       "             'everyone': 299,\n",
       "             'together': 300,\n",
       "             'instead': 301,\n",
       "             'beautiful': 302,\n",
       "             'said': 303,\n",
       "             'watched': 304,\n",
       "             'audience': 305,\n",
       "             'job': 306,\n",
       "             '1': 307,\n",
       "             'effects': 308,\n",
       "             'john': 309,\n",
       "             'plays': 310,\n",
       "             'takes': 311,\n",
       "             'version': 312,\n",
       "             'himself': 313,\n",
       "             'night': 314,\n",
       "             'house': 315,\n",
       "             'seem': 316,\n",
       "             'high': 317,\n",
       "             'wife': 318,\n",
       "             'seeing': 319,\n",
       "             'father': 320,\n",
       "             'left': 321,\n",
       "             'half': 322,\n",
       "             'excellent': 323,\n",
       "             'during': 324,\n",
       "             'idea': 325,\n",
       "             'war': 326,\n",
       "             'shot': 327,\n",
       "             'special': 328,\n",
       "             'nice': 329,\n",
       "             'star': 330,\n",
       "             'black': 331,\n",
       "             'less': 332,\n",
       "             'read': 333,\n",
       "             'else': 334,\n",
       "             'mind': 335,\n",
       "             'simply': 336,\n",
       "             'men': 337,\n",
       "             '3': 338,\n",
       "             'second': 339,\n",
       "             'home': 340,\n",
       "             'hollywood': 341,\n",
       "             'dead': 342,\n",
       "             'fan': 343,\n",
       "             'death': 344,\n",
       "             'short': 345,\n",
       "             'poor': 346,\n",
       "             'used': 347,\n",
       "             'given': 348,\n",
       "             'help': 349,\n",
       "             'line': 350,\n",
       "             'completely': 351,\n",
       "             'classic': 352,\n",
       "             'women': 353,\n",
       "             'top': 354,\n",
       "             'try': 355,\n",
       "             'either': 356,\n",
       "             'until': 357,\n",
       "             'enjoy': 358,\n",
       "             'need': 359,\n",
       "             'wrong': 360,\n",
       "             'kids': 361,\n",
       "             'performances': 362,\n",
       "             'use': 363,\n",
       "             'production': 364,\n",
       "             'along': 365,\n",
       "             'low': 366,\n",
       "             'boring': 367,\n",
       "             'budget': 368,\n",
       "             'camera': 369,\n",
       "             'friends': 370,\n",
       "             'full': 371,\n",
       "             'next': 372,\n",
       "             'truly': 373,\n",
       "             'rest': 374,\n",
       "             'couple': 375,\n",
       "             'tell': 376,\n",
       "             'stupid': 377,\n",
       "             'won': 378,\n",
       "             'stars': 379,\n",
       "             'remember': 380,\n",
       "             'awful': 381,\n",
       "             'sex': 382,\n",
       "             'start': 383,\n",
       "             'video': 384,\n",
       "             'face': 385,\n",
       "             'mean': 386,\n",
       "             'school': 387,\n",
       "             'came': 388,\n",
       "             'getting': 389,\n",
       "             'moments': 390,\n",
       "             'terrible': 391,\n",
       "             'perhaps': 392,\n",
       "             'recommend': 393,\n",
       "             'understand': 394,\n",
       "             'episode': 395,\n",
       "             'wonderful': 396,\n",
       "             'human': 397,\n",
       "             'small': 398,\n",
       "             'early': 399,\n",
       "             'name': 400,\n",
       "             'others': 401,\n",
       "             'playing': 402,\n",
       "             'often': 403,\n",
       "             'style': 404,\n",
       "             'written': 405,\n",
       "             'doing': 406,\n",
       "             'keep': 407,\n",
       "             'live': 408,\n",
       "             'person': 409,\n",
       "             'gives': 410,\n",
       "             'become': 411,\n",
       "             'perfect': 412,\n",
       "             'dialogue': 413,\n",
       "             'head': 414,\n",
       "             'lost': 415,\n",
       "             'itself': 416,\n",
       "             'finally': 417,\n",
       "             'yes': 418,\n",
       "             'definitely': 419,\n",
       "             'piece': 420,\n",
       "             'mother': 421,\n",
       "             'couldn': 422,\n",
       "             'felt': 423,\n",
       "             'lines': 424,\n",
       "             'supposed': 425,\n",
       "             'case': 426,\n",
       "             'evil': 427,\n",
       "             'boy': 428,\n",
       "             'children': 429,\n",
       "             'liked': 430,\n",
       "             'picture': 431,\n",
       "             'cinema': 432,\n",
       "             'problem': 433,\n",
       "             'absolutely': 434,\n",
       "             'entire': 435,\n",
       "             'title': 436,\n",
       "             'certainly': 437,\n",
       "             'killer': 438,\n",
       "             'went': 439,\n",
       "             'against': 440,\n",
       "             'fans': 441,\n",
       "             'called': 442,\n",
       "             'waste': 443,\n",
       "             'hope': 444,\n",
       "             'mr': 445,\n",
       "             'sort': 446,\n",
       "             'beginning': 447,\n",
       "             'white': 448,\n",
       "             'worse': 449,\n",
       "             'based': 450,\n",
       "             'overall': 451,\n",
       "             'dark': 452,\n",
       "             'friend': 453,\n",
       "             'oh': 454,\n",
       "             'several': 455,\n",
       "             'lives': 456,\n",
       "             'loved': 457,\n",
       "             'example': 458,\n",
       "             'care': 459,\n",
       "             'already': 460,\n",
       "             'entertaining': 461,\n",
       "             'becomes': 462,\n",
       "             'wanted': 463,\n",
       "             'despite': 464,\n",
       "             'direction': 465,\n",
       "             '5': 466,\n",
       "             'under': 467,\n",
       "             'drama': 468,\n",
       "             'history': 469,\n",
       "             'unfortunately': 470,\n",
       "             'son': 471,\n",
       "             'guess': 472,\n",
       "             'laugh': 473,\n",
       "             'turn': 474,\n",
       "             'seemed': 475,\n",
       "             'throughout': 476,\n",
       "             '\\x96': 477,\n",
       "             'lead': 478,\n",
       "             'heart': 479,\n",
       "             'humor': 480,\n",
       "             'sound': 481,\n",
       "             'quality': 482,\n",
       "             '4': 483,\n",
       "             'final': 484,\n",
       "             'amazing': 485,\n",
       "             'totally': 486,\n",
       "             'child': 487,\n",
       "             'close': 488,\n",
       "             'wants': 489,\n",
       "             'writing': 490,\n",
       "             'works': 491,\n",
       "             'kill': 492,\n",
       "             'town': 493,\n",
       "             'art': 494,\n",
       "             'michael': 495,\n",
       "             'tries': 496,\n",
       "             'guys': 497,\n",
       "             'behind': 498,\n",
       "             'game': 499,\n",
       "             'fine': 500,\n",
       "             'days': 501,\n",
       "             'side': 502,\n",
       "             'today': 503,\n",
       "             'act': 504,\n",
       "             'god': 505,\n",
       "             'turns': 506,\n",
       "             'car': 507,\n",
       "             'b': 508,\n",
       "             'able': 509,\n",
       "             'etc': 510,\n",
       "             'hand': 511,\n",
       "             'viewer': 512,\n",
       "             'enjoyed': 513,\n",
       "             'past': 514,\n",
       "             'city': 515,\n",
       "             'genre': 516,\n",
       "             'flick': 517,\n",
       "             'girls': 518,\n",
       "             'late': 519,\n",
       "             'starts': 520,\n",
       "             'directed': 521,\n",
       "             'sometimes': 522,\n",
       "             'favorite': 523,\n",
       "             'gave': 524,\n",
       "             'run': 525,\n",
       "             'horrible': 526,\n",
       "             'soon': 527,\n",
       "             'blood': 528,\n",
       "             'self': 529,\n",
       "             'actress': 530,\n",
       "             'fight': 531,\n",
       "             'brilliant': 532,\n",
       "             'eyes': 533,\n",
       "             'voice': 534,\n",
       "             'thinking': 535,\n",
       "             'kid': 536,\n",
       "             'expect': 537,\n",
       "             'themselves': 538,\n",
       "             'parts': 539,\n",
       "             'stuff': 540,\n",
       "             'obviously': 541,\n",
       "             'stories': 542,\n",
       "             'highly': 543,\n",
       "             'type': 544,\n",
       "             'killed': 545,\n",
       "             'daughter': 546,\n",
       "             'leave': 547,\n",
       "             'writer': 548,\n",
       "             'decent': 549,\n",
       "             'feeling': 550,\n",
       "             'except': 551,\n",
       "             'matter': 552,\n",
       "             'myself': 553,\n",
       "             'moment': 554,\n",
       "             'hour': 555,\n",
       "             'anyway': 556,\n",
       "             'slow': 557,\n",
       "             'brother': 558,\n",
       "             'age': 559,\n",
       "             'violence': 560,\n",
       "             'happened': 561,\n",
       "             'heard': 562,\n",
       "             'says': 563,\n",
       "             'police': 564,\n",
       "             'hit': 565,\n",
       "             'roles': 566,\n",
       "             'took': 567,\n",
       "             'particularly': 568,\n",
       "             'stop': 569,\n",
       "             'happens': 570,\n",
       "             'known': 571,\n",
       "             'james': 572,\n",
       "             'cannot': 573,\n",
       "             'strong': 574,\n",
       "             'hero': 575,\n",
       "             'alone': 576,\n",
       "             'experience': 577,\n",
       "             'murder': 578,\n",
       "             'chance': 579,\n",
       "             'obvious': 580,\n",
       "             'extremely': 581,\n",
       "             'living': 582,\n",
       "             'told': 583,\n",
       "             'coming': 584,\n",
       "             'involved': 585,\n",
       "             'wouldn': 586,\n",
       "             'including': 587,\n",
       "             'lack': 588,\n",
       "             'wonder': 589,\n",
       "             'gore': 590,\n",
       "             'happen': 591,\n",
       "             'attempt': 592,\n",
       "             'hell': 593,\n",
       "             'please': 594,\n",
       "             'cut': 595,\n",
       "             'crap': 596,\n",
       "             'save': 597,\n",
       "             'score': 598,\n",
       "             'interest': 599,\n",
       "             'number': 600,\n",
       "             'group': 601,\n",
       "             'ago': 602,\n",
       "             'husband': 603,\n",
       "             'complete': 604,\n",
       "             'song': 605,\n",
       "             'reality': 606,\n",
       "             'david': 607,\n",
       "             'hours': 608,\n",
       "             'simple': 609,\n",
       "             'none': 610,\n",
       "             'running': 611,\n",
       "             'exactly': 612,\n",
       "             'ok': 613,\n",
       "             'annoying': 614,\n",
       "             'possible': 615,\n",
       "             'ends': 616,\n",
       "             'seriously': 617,\n",
       "             'english': 618,\n",
       "             'shown': 619,\n",
       "             'change': 620,\n",
       "             'musical': 621,\n",
       "             'opening': 622,\n",
       "             'yourself': 623,\n",
       "             'sad': 624,\n",
       "             'taken': 625,\n",
       "             'across': 626,\n",
       "             'cool': 627,\n",
       "             'light': 628,\n",
       "             'released': 629,\n",
       "             'whose': 630,\n",
       "             'serious': 631,\n",
       "             'body': 632,\n",
       "             'looked': 633,\n",
       "             'documentary': 634,\n",
       "             'ridiculous': 635,\n",
       "             'hilarious': 636,\n",
       "             'cinematography': 637,\n",
       "             'jokes': 638,\n",
       "             'huge': 639,\n",
       "             'robert': 640,\n",
       "             'somewhat': 641,\n",
       "             'usual': 642,\n",
       "             'king': 643,\n",
       "             'order': 644,\n",
       "             'career': 645,\n",
       "             'novel': 646,\n",
       "             'power': 647,\n",
       "             'scary': 648,\n",
       "             'started': 649,\n",
       "             'wish': 650,\n",
       "             'usually': 651,\n",
       "             'room': 652,\n",
       "             'view': 653,\n",
       "             'call': 654,\n",
       "             'level': 655,\n",
       "             'talent': 656,\n",
       "             'talking': 657,\n",
       "             'ones': 658,\n",
       "             'finds': 659,\n",
       "             'five': 660,\n",
       "             'happy': 661,\n",
       "             'episodes': 662,\n",
       "             'opinion': 663,\n",
       "             'four': 664,\n",
       "             'taking': 665,\n",
       "             'major': 666,\n",
       "             'single': 667,\n",
       "             'important': 668,\n",
       "             'jack': 669,\n",
       "             'country': 670,\n",
       "             'saying': 671,\n",
       "             'word': 672,\n",
       "             'relationship': 673,\n",
       "             'shots': 674,\n",
       "             'mostly': 675,\n",
       "             'rating': 676,\n",
       "             'strange': 677,\n",
       "             'due': 678,\n",
       "             'middle': 679,\n",
       "             'silly': 680,\n",
       "             'female': 681,\n",
       "             'turned': 682,\n",
       "             'attention': 683,\n",
       "             'knows': 684,\n",
       "             'apparently': 685,\n",
       "             '7': 686,\n",
       "             'modern': 687,\n",
       "             'cheap': 688,\n",
       "             '8': 689,\n",
       "             'miss': 690,\n",
       "             'british': 691,\n",
       "             'aren': 692,\n",
       "             'songs': 693,\n",
       "             'television': 694,\n",
       "             'clearly': 695,\n",
       "             'rock': 696,\n",
       "             'comic': 697,\n",
       "             'disappointed': 698,\n",
       "             'earth': 699,\n",
       "             'paul': 700,\n",
       "             'events': 701,\n",
       "             'basically': 702,\n",
       "             'george': 703,\n",
       "             'words': 704,\n",
       "             'easily': 705,\n",
       "             'knew': 706,\n",
       "             'future': 707,\n",
       "             'fast': 708,\n",
       "             'bring': 709,\n",
       "             'local': 710,\n",
       "             'supporting': 711,\n",
       "             'problems': 712,\n",
       "             'moving': 713,\n",
       "             'non': 714,\n",
       "             'tells': 715,\n",
       "             'richard': 716,\n",
       "             'beyond': 717,\n",
       "             'upon': 718,\n",
       "             'falls': 719,\n",
       "             'review': 720,\n",
       "             'class': 721,\n",
       "             'talk': 722,\n",
       "             'thriller': 723,\n",
       "             'whether': 724,\n",
       "             'entertainment': 725,\n",
       "             'eye': 726,\n",
       "             'sequence': 727,\n",
       "             'similar': 728,\n",
       "             'appears': 729,\n",
       "             'mystery': 730,\n",
       "             'romantic': 731,\n",
       "             'within': 732,\n",
       "             'stand': 733,\n",
       "             'oscar': 734,\n",
       "             'theme': 735,\n",
       "             'lady': 736,\n",
       "             'straight': 737,\n",
       "             'giving': 738,\n",
       "             'york': 739,\n",
       "             'lee': 740,\n",
       "             'predictable': 741,\n",
       "             'ten': 742,\n",
       "             'o': 743,\n",
       "             'team': 744,\n",
       "             'red': 745,\n",
       "             'sequel': 746,\n",
       "             'needs': 747,\n",
       "             'points': 748,\n",
       "             'tale': 749,\n",
       "             'using': 750,\n",
       "             'bunch': 751,\n",
       "             'sets': 752,\n",
       "             'theater': 753,\n",
       "             'message': 754,\n",
       "             'animation': 755,\n",
       "             'enjoyable': 756,\n",
       "             'sister': 757,\n",
       "             'above': 758,\n",
       "             'dull': 759,\n",
       "             'nearly': 760,\n",
       "             'release': 761,\n",
       "             'named': 762,\n",
       "             'fantastic': 763,\n",
       "             'french': 764,\n",
       "             'herself': 765,\n",
       "             'die': 766,\n",
       "             'working': 767,\n",
       "             'add': 768,\n",
       "             'haven': 769,\n",
       "             'begins': 770,\n",
       "             'near': 771,\n",
       "             'surprised': 772,\n",
       "             'follow': 773,\n",
       "             'feels': 774,\n",
       "             'storyline': 775,\n",
       "             'figure': 776,\n",
       "             'general': 777,\n",
       "             'lots': 778,\n",
       "             'tom': 779,\n",
       "             'among': 780,\n",
       "             'clear': 781,\n",
       "             'editing': 782,\n",
       "             'showing': 783,\n",
       "             'typical': 784,\n",
       "             'effort': 785,\n",
       "             'minute': 786,\n",
       "             'check': 787,\n",
       "             'ways': 788,\n",
       "             'dance': 789,\n",
       "             'mention': 790,\n",
       "             'sorry': 791,\n",
       "             'actual': 792,\n",
       "             'comments': 793,\n",
       "             'easy': 794,\n",
       "             'stay': 795,\n",
       "             '9': 796,\n",
       "             'period': 797,\n",
       "             'buy': 798,\n",
       "             'elements': 799,\n",
       "             'somehow': 800,\n",
       "             'material': 801,\n",
       "             'greatest': 802,\n",
       "             'certain': 803,\n",
       "             'crime': 804,\n",
       "             'peter': 805,\n",
       "             'fall': 806,\n",
       "             'famous': 807,\n",
       "             'lame': 808,\n",
       "             'dialog': 809,\n",
       "             'doubt': 810,\n",
       "             'viewers': 811,\n",
       "             'america': 812,\n",
       "             'avoid': 813,\n",
       "             'de': 814,\n",
       "             'feature': 815,\n",
       "             'realistic': 816,\n",
       "             'season': 817,\n",
       "             'soundtrack': 818,\n",
       "             'zombie': 819,\n",
       "             'filmed': 820,\n",
       "             'viewing': 821,\n",
       "             'form': 822,\n",
       "             'weak': 823,\n",
       "             'hate': 824,\n",
       "             'tried': 825,\n",
       "             'brought': 826,\n",
       "             'particular': 827,\n",
       "             'space': 828,\n",
       "             'atmosphere': 829,\n",
       "             'sequences': 830,\n",
       "             'gone': 831,\n",
       "             'hear': 832,\n",
       "             'learn': 833,\n",
       "             'parents': 834,\n",
       "             'imagine': 835,\n",
       "             'kept': 836,\n",
       "             'whatever': 837,\n",
       "             'eventually': 838,\n",
       "             'expected': 839,\n",
       "             'indeed': 840,\n",
       "             'suspense': 841,\n",
       "             'dog': 842,\n",
       "             'means': 843,\n",
       "             'third': 844,\n",
       "             'note': 845,\n",
       "             'street': 846,\n",
       "             'became': 847,\n",
       "             'disney': 848,\n",
       "             'stage': 849,\n",
       "             'wait': 850,\n",
       "             'baby': 851,\n",
       "             'joe': 852,\n",
       "             'killing': 853,\n",
       "             'leads': 854,\n",
       "             'sexual': 855,\n",
       "             'surprise': 856,\n",
       "             'deal': 857,\n",
       "             'move': 858,\n",
       "             'rent': 859,\n",
       "             'nature': 860,\n",
       "             'sit': 861,\n",
       "             'reviews': 862,\n",
       "             'forget': 863,\n",
       "             'believable': 864,\n",
       "             'directors': 865,\n",
       "             'average': 866,\n",
       "             'imdb': 867,\n",
       "             'premise': 868,\n",
       "             'needed': 869,\n",
       "             'poorly': 870,\n",
       "             'truth': 871,\n",
       "             'leaves': 872,\n",
       "             'possibly': 873,\n",
       "             'screenplay': 874,\n",
       "             'difficult': 875,\n",
       "             'free': 876,\n",
       "             'okay': 877,\n",
       "             'credits': 878,\n",
       "             'subject': 879,\n",
       "             'decided': 880,\n",
       "             'japanese': 881,\n",
       "             '20': 882,\n",
       "             'hot': 883,\n",
       "             'society': 884,\n",
       "             'dream': 885,\n",
       "             'question': 886,\n",
       "             'meet': 887,\n",
       "             'dr': 888,\n",
       "             'fantasy': 889,\n",
       "             'reading': 890,\n",
       "             'unless': 891,\n",
       "             'romance': 892,\n",
       "             'nor': 893,\n",
       "             'open': 894,\n",
       "             'comment': 895,\n",
       "             'meets': 896,\n",
       "             'forced': 897,\n",
       "             'superb': 898,\n",
       "             'begin': 899,\n",
       "             'badly': 900,\n",
       "             'memorable': 901,\n",
       "             'crazy': 902,\n",
       "             'dramatic': 903,\n",
       "             'laughs': 904,\n",
       "             'weird': 905,\n",
       "             'jane': 906,\n",
       "             'features': 907,\n",
       "             'earlier': 908,\n",
       "             'emotional': 909,\n",
       "             'mark': 910,\n",
       "             'male': 911,\n",
       "             'otherwise': 912,\n",
       "             'footage': 913,\n",
       "             'towards': 914,\n",
       "             'worked': 915,\n",
       "             'fi': 916,\n",
       "             'older': 917,\n",
       "             'write': 918,\n",
       "             'shame': 919,\n",
       "             'writers': 920,\n",
       "             'acted': 921,\n",
       "             'sci': 922,\n",
       "             'interested': 923,\n",
       "             'monster': 924,\n",
       "             'cheesy': 925,\n",
       "             'cop': 926,\n",
       "             'air': 927,\n",
       "             'situation': 928,\n",
       "             'beauty': 929,\n",
       "             'whom': 930,\n",
       "             'background': 931,\n",
       "             'deep': 932,\n",
       "             'keeps': 933,\n",
       "             'present': 934,\n",
       "             'realize': 935,\n",
       "             'fire': 936,\n",
       "             'perfectly': 937,\n",
       "             'result': 938,\n",
       "             'setting': 939,\n",
       "             'forward': 940,\n",
       "             'quickly': 941,\n",
       "             'effect': 942,\n",
       "             'pay': 943,\n",
       "             'development': 944,\n",
       "             'e': 945,\n",
       "             'rate': 946,\n",
       "             'ask': 947,\n",
       "             'directing': 948,\n",
       "             'twist': 949,\n",
       "             'bill': 950,\n",
       "             'box': 951,\n",
       "             'total': 952,\n",
       "             'mess': 953,\n",
       "             'personal': 954,\n",
       "             'admit': 955,\n",
       "             'doctor': 956,\n",
       "             'fighting': 957,\n",
       "             'girlfriend': 958,\n",
       "             'meant': 959,\n",
       "             'return': 960,\n",
       "             'sounds': 961,\n",
       "             'casting': 962,\n",
       "             'powerful': 963,\n",
       "             '30': 964,\n",
       "             'create': 965,\n",
       "             'hands': 966,\n",
       "             'political': 967,\n",
       "             'secret': 968,\n",
       "             'era': 969,\n",
       "             'incredibly': 970,\n",
       "             'creepy': 971,\n",
       "             'apart': 972,\n",
       "             'boys': 973,\n",
       "             'scott': 974,\n",
       "             'gay': 975,\n",
       "             'previous': 976,\n",
       "             'married': 977,\n",
       "             'christmas': 978,\n",
       "             'plenty': 979,\n",
       "             'telling': 980,\n",
       "             'unique': 981,\n",
       "             'western': 982,\n",
       "             'co': 983,\n",
       "             'portrayed': 984,\n",
       "             'business': 985,\n",
       "             'potential': 986,\n",
       "             'reasons': 987,\n",
       "             'front': 988,\n",
       "             'leading': 989,\n",
       "             'plus': 990,\n",
       "             'nudity': 991,\n",
       "             'appear': 992,\n",
       "             'battle': 993,\n",
       "             'hardly': 994,\n",
       "             'masterpiece': 995,\n",
       "             'outside': 996,\n",
       "             'fails': 997,\n",
       "             'brings': 998,\n",
       "             'dumb': 999,\n",
       "             ...})"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ベクトル化したバージョンのボキャブラリーを作成します\n",
    "TEXT.build_vocab(train_ds, vectors=english_fasttext_vectors, min_freq=10)\n",
    "\n",
    "# ボキャブラリーのベクトルを確認します\n",
    "print(TEXT.vocab.vectors.shape)  # 17916個の単語が300次元のベクトルで表現されている\n",
    "TEXT.vocab.vectors\n",
    "\n",
    "# ボキャブラリーの単語の順番を確認します\n",
    "TEXT.vocab.stoi\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(tensor([[  2,  15,  22,  ...,   1,   1,   1],\n",
      "        [  2,  57,  14,  ...,   1,   1,   1],\n",
      "        [  2,  14,  43,  ...,   1,   1,   1],\n",
      "        ...,\n",
      "        [  2,  15, 621,  ...,   1,   1,   1],\n",
      "        [  2,  93,  25,  ...,   1,   1,   1],\n",
      "        [  2,  15,  22,  ...,   1,   1,   1]]), tensor([122, 152, 167, 145, 104, 128, 238,  88, 256, 172, 205, 243, 256, 129,\n",
      "        256, 198, 191, 172, 256, 256, 119, 173,  95, 141]))\n",
      "tensor([1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0])\n"
     ]
    }
   ],
   "source": [
    "# DataLoaderを作成します（torchtextの文脈では単純にiteraterと呼ばれています）\n",
    "train_dl = torchtext.data.Iterator(train_ds, batch_size=24, train=True)\n",
    "\n",
    "val_dl = torchtext.data.Iterator(\n",
    "    val_ds, batch_size=24, train=False, sort=False)\n",
    "\n",
    "test_dl = torchtext.data.Iterator(\n",
    "    test_ds, batch_size=24, train=False, sort=False)\n",
    "\n",
    "\n",
    "# 動作確認 検証データのデータセットで確認\n",
    "batch = next(iter(val_dl))\n",
    "print(batch.Text)\n",
    "print(batch.Label)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "このようにDataLoaderは単語のidを格納しているので、分散表現はディープラーニングモデル側でidに応じて取得してあげる必要があります。\n",
    "\n",
    "ここまでの内容をフォルダ「utils」のdataloader.pyに別途保存しておき、次節からはこちらから読み込むようにします"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
